<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Tencent IM</title>

    <script src="../js/jquery-3.2.1.js"></script>
    <script src="../js/webim.js"></script>
    <script src="../js/json2.js"></script>
    <script src="../js/webim_no_emotion.js"></script>

    <script type="text/javascript">
        var loginInfo = {
            sdkAppID : '1400066983' ,
            appIDAt3rd : '1400066983' ,
            identifier : 'anonymous' ,
            identifierNick : 'anonymous' ,
            userSig : 'eJxFkNFOgzAUQP*FV40rLWXoG*KmU7fBhmby0hRasFFKKWVuMf77WMPi6zm5uffcXyd93d5QpQQj1BCkmXPnAOfaYn5QQnNCS8P1gF2MMQTgYvdcd6KRg4DAxS5EAPxLwbg0ohR2kMpGHuum70bZiWqgy9lHtEgegtXu3csmszwDJg7l7n6eravvRHP81LH15G2ZHjaqSBGtfhafYez329Lr0XNbT4sWBptchL56yed71oZxtHoEURIpll5hcVnGvojtOxd4w4W*fxugURpRc1vmTgOIUIBHToui6aUh5qi4fcjfCURaWRA_'
        };


        //把消息转换成Html
        function convertMsgtoHtml(msg) {
            var html = "", elems, elem, type, content;
            elems = msg.getElems();//获取消息包含的元素数组
            for (var i in elems) {
                elem = elems[i];
                type = elem.getType();//获取元素类型
                content = elem.getContent();//获取元素对象
                switch (type) {
                    case webim.MSG_ELEMENT_TYPE.TEXT:
                        html += content.getText();
                        break;
                    case webim.MSG_ELEMENT_TYPE.FACE:
//                        html += convertFaceMsgToHtml(content);
                        break;
                    case webim.MSG_ELEMENT_TYPE.IMAGE:
//                        html += convertImageMsgToHtml(content);
                        break;
                    case webim.MSG_ELEMENT_TYPE.SOUND:
//                        html += convertSoundMsgToHtml(content);
                        break;
                    case webim.MSG_ELEMENT_TYPE.FILE:
//                        html += convertFileMsgToHtml(content);
                        break;
                    case webim.MSG_ELEMENT_TYPE.LOCATION://暂不支持地理位置
                        //html += convertLocationMsgToHtml(content);
                        break;
                    case webim.MSG_ELEMENT_TYPE.CUSTOM:
//                        html += convertCustomMsgToHtml(content);
                        break;
                    case webim.MSG_ELEMENT_TYPE.GROUP_TIP:
//                        html += convertGroupTipMsgToHtml(content);
                        break;
                    default:
                        webim.Log.error('未知消息元素类型: elemType=' + type);
                        break;
                }
            }
            return html;
        }

        //监听连接状态回调变化事件
        var onConnNotify = function (resp) {
            var info;
            switch (resp.ErrorCode) {
                case webim.CONNECTION_STATUS.ON:
                    webim.Log.warn('建立连接成功: ' + resp.ErrorInfo);
                    break;
                case webim.CONNECTION_STATUS.OFF:
                    info = '连接已断开，无法收到新消息，请检查下你的网络是否正常: ' + resp.ErrorInfo;
                    alert(info);
                    webim.Log.warn(info);
                    break;
                case webim.CONNECTION_STATUS.RECONNECT:
                    info = '连接状态恢复正常: ' + resp.ErrorInfo;
                    alert(info);
                    webim.Log.warn(info);
                    break;
                default:
                    webim.Log.error('未知连接状态: =' + resp.ErrorInfo);
                    break;
            }
        };

        //监听新消息事件
        //newMsgList 为新消息数组，结构为[Msg]
        function onMsgNotify(newMsgList) {
            alert('监听新消息事件 =====> ' + convertMsgtoHtml(newMsgList[0]));
//            console.warn('监听新消息事件 =====> ' + newMsgList);
            var sess, newMsg;
            //获取所有聊天会话
            var sessMap = webim.MsgStore.sessMap();

            for (var j in newMsgList) {//遍历新消息
                newMsg = newMsgList[j];

                if (newMsg.getSession().id() == loginInfo.identifier) {//为当前聊天对象的消息
                    selSess = newMsg.getSession();
                    //在聊天窗体中新增一条消息
                    webim.Log.info('收到一条新消息 ===> ' + convertMsgtoHtml(newMsg));
                    alert('收到一条新消息 ===> ' + convertMsgtoHtml(newMsg));
                }
            }
            //消息已读上报，以及设置会话自动已读标记
            webim.setAutoRead(selSess, true, true);

            for (var i in sessMap) {
                sess = sessMap[i];
                if (loginInfo.identifier != sess.id()) {//更新其他聊天对象的未读消息数
//                    updateSessDiv(sess.type(), sess.id(), sess.unread());
                }
            }
        };

        //监听（多终端同步）群系统消息方法，方法都定义在receive_group_system_msg.js文件中
        //注意每个数字代表的含义，比如，
        //1表示监听申请加群消息，2表示监听申请加群被同意消息，3表示监听申请加群被拒绝消息
        /*var groupSystemNotifys = {
            "1": onApplyJoinGroupRequestNotify, //申请加群请求（只有管理员会收到）
            "2": onApplyJoinGroupAcceptNotify, //申请加群被同意（只有申请人能够收到）
            "3": onApplyJoinGroupRefuseNotify, //申请加群被拒绝（只有申请人能够收到）
            "4": onKickedGroupNotify, //被管理员踢出群(只有被踢者接收到)
            "5": onDestoryGroupNotify, //群被解散(全员接收)
            "6": onCreateGroupNotify, //创建群(创建者接收)
            "7": onInvitedJoinGroupNotify, //邀请加群(被邀请者接收)
            "8": onQuitGroupNotify, //主动退群(主动退出者接收)
            "9": onSetedGroupAdminNotify, //设置管理员(被设置者接收)
            "10": onCanceledGroupAdminNotify, //取消管理员(被取消者接收)
            "11": onRevokeGroupNotify, //群已被回收(全员接收)
            "255": onCustomGroupNotify//用户自定义通知(默认全员接收)
        };*/

        //监听好友系统通知函数对象，方法都定义在receive_friend_system_msg.js文件中
        /*var onFriendSystemNotifys = {
            "1": onFriendAddNotify, //好友表增加
            "2": onFriendDeleteNotify, //好友表删除
            "3": onPendencyAddNotify, //未决增加
            "4": onPendencyDeleteNotify, //未决删除
            "5": onBlackListAddNotify, //黑名单增加
            "6": onBlackListDeleteNotify//黑名单删除
        };*/

        //监听资料系统通知函数对象，方法都定义在receive_profile_system_msg.js文件中
        /*var onProfileSystemNotifys = {
            "1": onProfileModifyNotify//资料修改
        };*/

        //监听C2C消息通道的处理，方法在receive_new_msg.js文件中
        /*var onC2cEventNotifys = {
            "92": onMsgReadedNotify,//消息已读通知
        };*/

        //监听 群资料变化 群提示消息
        function onGroupInfoChangeNotify(groupInfo) {
            webim.Log.warn("执行 群资料变化 回调： " + JSON.stringify(groupInfo));
            var groupId = groupInfo.GroupId;
            var newFaceUrl = groupInfo.GroupFaceUrl;//新群组图标, 为空，则表示没有变化
            var newName = groupInfo.GroupName;//新群名称, 为空，则表示没有变化
            var newOwner = groupInfo.OwnerAccount;//新的群主id, 为空，则表示没有变化
            var newNotification = groupInfo.GroupNotification;//新的群公告, 为空，则表示没有变化
            var newIntroduction = groupInfo.GroupIntroduction;//新的群简介, 为空，则表示没有变化

            if (newName) {
                //更新群组列表的群名称
                //To do
                webim.Log.warn("群id=" + groupId + "的新名称为：" + newName);
            }
        }

        //监听事件
        var listeners = {
            "onConnNotify": onConnNotify//监听连接状态回调变化事件,必填
//            ,"jsonpCallback": jsonpCallback//IE9(含)以下浏览器用到的jsonp回调函数，
            ,"onMsgNotify": onMsgNotify//监听新消息(私聊，普通群(非直播聊天室)消息，全员推送消息)事件，必填
//            ,"onBigGroupMsgNotify": onBigGroupMsgNotify//监听新消息(直播聊天室)事件，直播场景下必填
//            ,"onGroupSystemNotifys": onGroupSystemNotifys//监听（多终端同步）群系统消息事件，如果不需要监听，可不填
            ,"onGroupInfoChangeNotify": onGroupInfoChangeNotify//监听群资料变化事件，选填
//            ,"onFriendSystemNotifys": onFriendSystemNotifys//监听好友系统通知事件，选填
//            ,"onProfileSystemNotifys": onProfileSystemNotifys//监听资料系统（自己或好友）通知事件，选填
//            ,"onKickedEventCall" : onKickedEventCall//被其他登录实例踢下线
//            ,"onC2cEventNotifys": onC2cEventNotifys//监听C2C系统消息通道
        };

        var options = {
            isAccessFormalEnv : true ,
            isLogOn : true
        };

        //sdk登录
        webim.login(
            loginInfo, listeners, options,
            function (resp) {
                loginInfo.identifierNick = resp.identifierNick;//设置当前用户昵称
                webim.Log.info('user login success ===> ' + resp.ActionStatus);
            },
            function (err) {
                alert('user login failed ' + err.ErrorInfo);
            }
        );

        var sendMsg = function () {
            var msgContent = $('#msg').val();
            webim.Log.info('发送消息 ===== 》 ' + msgContent);
            var selType = webim.SESSION_TYPE.C2C;
            var selSess = new webim.Session(selType, loginInfo.identifier, loginInfo.identifier, '', Math.round(new Date().getTime() / 1000));
            var isSend = false;//是否为自己发送
            var seq = -1;//消息序列，-1表示sdk自动生成，用于去重
            var random = Math.round(Math.random() * 4294967296);//消息随机数，用于去重
            var msgTime = Math.round(new Date().getTime() / 1000);//消息时间戳
            var subType = webim.C2C_MSG_SUB_TYPE.COMMON;//消息子类型

            var msg = new webim.Msg(selSess, isSend, seq, random, msgTime, loginInfo.identifier, subType, loginInfo.identifierNick);
            var text_obj = new webim.Msg.Elem.Text(msgContent);
            msg.addText(text_obj);

            webim.sendMsg(msg, function (resp) {
                if (selType == webim.SESSION_TYPE.C2C) {
                    //私聊时，在聊天窗口手动添加一条发的消息，群聊时，长轮询接口会返回自己发的消息
                }
                webim.Tool.setCookie("tmpmsg_" + loginInfo.identifier, '', 0);
                $("#msg").val('');
            }, function (err) {
                alert(err.ErrorInfo);
                $("#msg").val('');
            });
        }
    </script>
</head>
<body>
    <h2>Tencent IM Demo</h2>
    <input type="text" placeholder="输入消息" id="msg" />
    <button onclick="sendMsg()">发送消息</button>
</body>
</html>